<?php
	include 'p.php';
	// p($_FILES);
class Upload{
	//上传目录属性
	private $uploadDir;

	public function __construct($path='upload/'){
		$this->uploadDir = $path;
	}
	//上传方法
	public function uploadMethoad(){
		// 1.遍历数组
		$newArr = $this->restArr();

		foreach ($newArr as $arr) {
			// 1.筛选
			$filter = $this->filter($arr);

			if($filter){
				// 2.移动上传
				// print_r($arr);
				$this->move($arr);
			}
		}

	}

	// 遍历数组
	public function arr(){
		return $newArr = $this->restArr();
	}

	/**
	 * [restArr] 重组数组
	 * [$tmpArr] 数组跟单文件上传数组一样
	 */
	private function restArr(){
		// 遍历$_FILES
		foreach ($_FILES as $v) {
			//判断是不是多文件上传
			if(is_array($v)){
				// 遍历$V 里边的name() 不直接使用$V 避免受用户name的影响
				foreach ($v['name'] as $key => $value) {
					$tmpArr[] =
						array(
							'name' => $value,
							'type' => $v['type'][$key],
							'tmp_name' => $v['tmp_name'][$key],
							'error' => $v['error'][$key],
							'size' => $v['size'][$key],
							);

				}
			}else{
				$tmpArr[] = $v;
			}
			return $tmpArr;
		}
	}

	/**
	 * [filter] 筛选 此方法筛选通过返回真 筛选失败返回假 并弹出错误内荣跳回主页面
	 *
	 */
	private function filter($arr){
			// p($arr['tmp_name']);

		// 2、判断是否是合法路径上传
		if(is_uploaded_file($arr['tmp_name'])){
			// 3.判断类型是否允许
			// 3.1.获取文件类型
			$type = strrchr($arr['name'], '.');
			$arrType = array('.jpg','.png','.gif','.bmp','.jpeg');
			if(in_array($type, $arrType)){
				// 4.判断大小是否允许
				// 4.1 获取问件大小
				$size = $arr['size'];
				// $unit = $size>pow(1024, 3)? array(3,"G"):(
				// 		$size>pow(1024, 2)? array(2,"M"):array(1,"k"));
				if($size<1048576){
					// 5.4种错误警告
					// 5.1获取错误类型
					$error = $arr['error'];
					switch ($error) {
						case '0':
							return true;
						case '1':
							echo '<script>alert("大小超过了php.ini 中 upload_max_filesize 限制值 ");location.href="Index.php";</script>';
							break;
						case '2':
							echo '<script>alert("大小超过HTML 表单中 MAX_FILE_SIZE 选项指定的值 ");location.href="Index.php";</script>';
							break;
						case '3':
							echo '<script>alert("文件只有部分被上传");location.href="Index.php";</script>';
							break;
						case '4':
							echo '<script>alert("不要着急嘛！你还没有上传文件呢!");location.href="Index.php";</script>';
							break;
						default:
							return true;
					}
				}else{
					echo '<script>alert("你的文件大小超出限制 请上传2M以内的图片");location.href="Index.php";</script>';
					return false;
				}

			}else{
				echo '<script>alert("你的文件类型不允许 请上传图片");location.href="Index.php";</script>';
				return false;
			}

		}else{
			if($arr['tmp_name']==''){
				echo '<script>alert("请选择上传的图片");location.href="Index.php";</script>';
			}else{
				echo '<script>alert("你的文件不是是通过HTTP POST 上传的合法上传文件");location.href="Index.php";</script>';
			}

			return false;
		}
	}

	/**
	 * [move description] 移动函数
	 *
	 */
	private function move($arr){
		// 1.文件名
		//1.1 获取文件
		$file = $arr['tmp_name'];
		$type = strrchr($arr['name'], '.');
		$fileName = date('Y-m-d-H-i-s',time()).mt_rand(0,99999).$type;
		// 2.路径
		$path = $this->uploadDir.date('ymd');
		is_dir($path) || mkdir($path, 0777, true);
		$fullPath = $path.'/'.$fileName;
		// 3.移动上传
		move_uploaded_file($file, $fullPath);
	}



}


 ?>
